home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
051-060
/
amok58
/
fcs
/
fcs.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
4KB
|
106 lines
(* ==================================================================== *)
(* === FileCheckSum =================================================== *)
(* ==================================================================== *)
(*
:Program. FCS.MOD
:Contents. calculates a 32-Bit CRC for a file
:Author. Peter Fröhlich [phf]
:Copyright. Public Domain
:Language. Oberon (revised)
:Translator. Amiga Oberon V2.01
:History. V1.0 [phf] 09-Sep-1991 [created] twice as fast as CRC32.c
:Support. Idea by Garry Glendown, SYSOP@INSIDER.ZER. Thanx.
:Imports. CRC.MOD
:Bugs. none known, is a bit slow
:Address. Z-NET:P.FROEHLICH@NEXT-BOX.ZER
:Usage. FCS <filename>
:Remark. needs "crc.library"
*)
(* ==================================================================== *)
MODULE FCS;
(* ==================================================================== *)
(* === Imports ======================================================== *)
(* ==================================================================== *)
IMPORT
arg : Arguments,
d : Dos,
io : io,
CRC,
sys : SYSTEM;
(* ==================================================================== *)
(* === Constants ====================================================== *)
(* ==================================================================== *)
CONST
blockSize = 8192;
(* ==================================================================== *)
(* === Variables ====================================================== *)
(* ==================================================================== *)
VAR
fileName : ARRAY 256 OF CHAR;
fileCRC : LONGINT;
buffer : ARRAY blockSize OF BYTE; (* made global for less stack usage *)
(* ==================================================================== *)
(* === Procedures ===================================================== *)
(* ==================================================================== *)
PROCEDURE CalcFileCRC(fileName: ARRAY OF CHAR; VAR (*OUT*) crc: LONGINT): BOOLEAN;
(* $CopyArrays- *)
VAR
file: d.FileHandlePtr;
len : LONGINT;
readSomething : BOOLEAN;
BEGIN
file := d.Open(fileName,d.oldFile);
IF (file # NIL) THEN
crc := -1; readSomething := FALSE;
REPEAT
len := d.Read(file,buffer,blockSize);
IF (len > 0) THEN
crc := CRC.CalcCRC32(sys.ADR(buffer),crc,len);
readSomething := TRUE;
END;
UNTIL (len < blockSize);
IF d.Close(file) THEN END;
RETURN readSomething;
ELSE
RETURN FALSE;
END;
END CalcFileCRC;
(* ==================================================================== *)
(* ==================================================================== *)
(* === Main =========================================================== *)
(* ==================================================================== *)
BEGIN (* FCS *)
io.WriteString("FileCheckSum V1.0 [PD] 09-Sep-1991 --- by Nephthys Software, P.Fröhlich.\n");
IF (arg.NumArgs() = 1) THEN
arg.GetArg(1,fileName);
IF CalcFileCRC(fileName, fileCRC) THEN
io.WriteString("File: \[1m"); io.WriteString(fileName);
io.WriteString("\[m\nCRC-32: \[1m"); io.WriteHex(fileCRC,8);
io.WriteString("\[m\n");
ELSE
io.WriteString("FCS: Error while calculating checksum.\n");
END;
ELSE
io.WriteString("FCS: Usage: FCS <filename>.\n");
END;
END FCS.
(* ==================================================================== *)